package com.duoduo.common.util.anno.method;


import com.duoduo.common.api.constants.Constant;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 和key生成规则相关的设置
 * @author duoduo
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface KeyRule {
	
    /**通过el表达式计算缓存的key，如果计算结果不为空，则直接用计算结果作为key，不再考虑方法名，MD5编码等；如果为空，则继续KeyParam注解的处理等
     * <br/>注意，这个表达式的计算结果不应该为空
     * @return
     */
    String key() default Constant.EMPTY_STRING;

	/**
	 * 是否使用appName作为key的前缀，默认true，只在分布式锁上起作用，因为只有分布式锁涉及跨进程加锁，有可能要求所有进程使用一样的lockkey；缓存应该针对你每个项目有自己独立的命名空间
	 * @return
	 */
	boolean useAppName() default true;
    
    /**
     * 2018/8/1 是否使用方法作为key，默认true
     * @return
     */
	boolean useMethodKey() default true;
	
	/**
	 * 2018/8/1 是否对key做md5加密，默认true
	 * @return
	 */
	boolean useSecretKey() default true;

}
